/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hormigas_packettracker;

import hormigas_packettracker.beans.Mapa;
import hormigas_packettracker.beans.Pedido;
import hormigas_packettracker.beans.Vehiculo;
import hormigas_packettracker.colonia.ColoniaHormigas;
import hormigas_packettracker.config.GestorVehiculos;
import hormigas_packettracker.config.Parameters;
import hormigas_packettracker.config.Reloj;
import hormigas_packettracker.config.Solucion;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Shadow
 */
public class Hormigas_packetTracker {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        Parameters.init();
        Mapa.init(Parameters.ANCHO_MAPA, Parameters.ALTO_MAPA);
        //iniciar tiempo a 00:00
        Reloj reloj = Reloj.getInstancia();
        reloj.tick();
        Dispatcher.leerEventosDia();
        ArrayList<Pedido> pedidos = Dispatcher.siguientesPedidos();

        GestorVehiculos gestorVehiculos = GestorVehiculos.getInstancia();
        gestorVehiculos.crearVehiculos();

        ColoniaHormigas.crearNodosMapa();
        ColoniaHormigas.initFeronoma();
        ArrayList<Pedido> pedidosNuevos = pedidos;
        while (!Dispatcher.finPedidos()) {
            System.out.println("-------------------------------------------------------------------------------------------------------");
            System.out.println("Hora: " + reloj.getHora() + ":" + reloj.getMinuto());
            System.out.println("Numero pedidos en la cola: " + Dispatcher.getColaPedidos().size());
            System.out.println("Numero pedidos: " + pedidos.size());
            System.out.print("Tiempo del algoritmo: ");
            if (reloj.getHora()==22 && reloj.getMinuto() == 30){
                int gg = 0;
            }
            Date b = new Date();
            ColoniaHormigas.obtenerSolucion(pedidos,pedidosNuevos);
            Date a = new Date();
            System.out.println(a.getTime() - b.getTime());
            gestorVehiculos.asignarRutas(ColoniaHormigas.mejoresHormigas);
            int ventana = reloj.getTickLength();
            reloj.tick();
            gestorVehiculos.actualizarVehiculosYOrdenes(ventana, pedidos);
            for (int i = 0; i < gestorVehiculos.getVehiculos().size(); i++) {
                Vehiculo v = gestorVehiculos.getVehiculos().get(i);
                if (v.getRuta().size() == 1) continue;
                System.out.println("Vehiculo " + i + ":");
                for (int j = 0; j < v.getRuta().size(); j++) {
                        System.out.print("(" + v.getRuta().get(j).getX() + "," + v.getRuta().get(j).getY() + ") ");
                }
                System.out.println();
            }
            pedidosNuevos = Dispatcher.siguientesPedidos();
            pedidos.addAll(pedidosNuevos);
        }
    }
}
